﻿//using Microsoft.Extensions.DependencyInjection;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using System.Threading.Tasks;
//using Marmat.Foundation;
//using Marmat.FrameWork;

//namespace Marmat.Extensions
//{
//    /// <summary>
//    /// 服务集合的扩展支持
//    /// </summary>
//    public static class ServiceCollectionExtension
//    {

//        private static IServiceCollection serviceCollection;
//        private static System.IServiceProvider serviceProvider;

//        /// <summary>
//        /// 设置服务提供者
//        /// </summary>
//        /// <param name="services"></param>
//        internal static void SetServiceCollection(IServiceCollection services)
//        {
//            serviceCollection = services;
//        }

//        /// <summary>
//        /// 获取服务集合池
//        /// </summary>
//        /// <param name="instance"></param>
//        /// <returns></returns>
//        public static IServiceCollection GetServiceCollection(this IProvider instance)
//        {
//            return GetServiceCollection();
//        }

//        /// <summary>
//        /// 获取服务集合池
//        /// </summary>
//        /// <returns></returns>
//        public static IServiceCollection GetServiceCollection()
//        {
//            return serviceCollection;
//        }

//        /// <summary>
//        /// 设置服务提供者
//        /// </summary>
//        /// <param name="provider"></param>
//        /// <param name="serviceProvider"></param>
//        internal static void SetServiceProvider(this System.IServiceProvider provider, System.IServiceProvider serviceProvider)
//        {
//            SetServiceProvider(serviceProvider);
//        }

//        /// <summary>
//        /// 设置服务提供者
//        /// </summary>
//        /// <param name="serviceProvider"></param>
//        internal static void SetServiceProvider(System.IServiceProvider serviceProvider)
//        {
//            ServiceCollectionExtension.serviceProvider = serviceProvider;
//        }

//        /// <summary>
//        /// 获取服务提供者对象。
//        /// </summary>
//        /// <param name="instance"></param>
//        /// <returns></returns>
//        public static System.IServiceProvider GetServiceProvider(this IProvider instance)
//        {
//            return ServiceCollectionExtension.serviceProvider;
//        }

//        /// <summary>
//        /// 获取服务提供者对象。
//        /// </summary>
//        /// <returns></returns>
//        public static System.IServiceProvider GetServiceProvider()
//        {
//            return ServiceCollectionExtension.serviceProvider;
//        }

//        /// <summary>
//        /// 通过依赖注入获取T类型的服务。
//        /// </summary>
//        /// <typeparam name="T">需要获取的类型</typeparam>
//        /// <param name="_"></param>
//        /// <returns></returns>
//        public static T GetService<T>(this IProvider _) where T : class
//        {
//            return ServiceProviderServiceExtensions.GetService<T>(ServiceCollectionExtension.serviceProvider);
//        }

//        /// <summary>
//        /// 通过依赖注入获取T类型的服务。
//        /// </summary>
//        /// <typeparam name="T">需要获取的类型</typeparam>
//        /// <returns></returns>
//        public static T GetService<T>() where T : class
//        {
//            if (ServiceCollectionExtension.serviceProvider is not null)
//                return ServiceProviderServiceExtensions.GetService<T>(ServiceCollectionExtension.serviceProvider);
//            else
//                throw new NullReferenceException();
//        }

//        /// <summary>
//        /// 通过依赖注入获取T类型的服务组。
//        /// </summary>
//        /// <typeparam name="T">需要获取的类型</typeparam>
//        /// <param name="_"></param>
//        /// <returns></returns>
//        public static IEnumerable<T> GetServices<T>(this IProvider _) where T : class
//        {
//            return GetServices<T>();
//        }

//        /// <summary>
//        /// 通过依赖注入获取T类型的服务组。
//        /// </summary>
//        /// <typeparam name="T">需要获取的类型</typeparam>
//        /// <returns></returns>
//        public static IEnumerable<T> GetServices<T>() where T : class
//        {
//            return ServiceProviderServiceExtensions.GetServices<T>(ServiceCollectionExtension.serviceProvider);
//        }
//    }
//}
